/*
 * 版权所有 (C) 2015 知启蒙(ZHIQIM) 保留所有权利。[遇见知启蒙，邂逅框架梦]
 * 
 * https://zhiqim.org/project/zhiqim_framework/zhiqim_kernel.htm
 *
 * Zhiqim Kernel is licensed under Mulan PSL v2.
 * You can use this software according to the terms and conditions of the Mulan PSL v2.
 * You may obtain a copy of Mulan PSL v2 at:
 *          http://license.coscl.org.cn/MulanPSL2
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * See the Mulan PSL v2 for more details.
 */
package org.zhiqim.kernel.logging.logger;

import java.util.ArrayList;

import org.zhiqim.kernel.logging.Log;
import org.zhiqim.kernel.logging.LogAppender;
import org.zhiqim.kernel.logging.Logger;

/**
 * 日志写入器，对支持多个Logger的封装
 *
 * @version v1.5.0 @author zouzhigang 2019-4-22 新建与整理
 */
public class ZhiqimLogger implements Logger
{
    private int levelMin;                   //支持的最小级别
    private int levelMax;                   //支持的最大级别
    
    private ArrayList<LogAppender> list = new ArrayList<>();
    
    public void add(LogAppender appender)
    {
        list.add(appender);
        list.trimToSize();
    }
    
    /******************************************************************************************/
    //实现初始化加载&写入和判断
    /******************************************************************************************/
    
    @Override /** 初始化加载 */
    public boolean load()
    {
        return true;
    }
    
    @Override /** 日志记录器记录日志 */
    public void append(Log log, int level, String message, Throwable throwable)
    {
        for (LogAppender appender : list)
        {
            appender.append(level, message, throwable);
        }
    }
    
    @Override /** 判断日志级别是否开启 */
    public boolean isEnabled(Log log, int level)
    {
        return level >= levelMin && level <= levelMax;
    }
    
    /******************************************************************************************/
    //等级属性 getter/setter
    /******************************************************************************************/
    
    public int getLevelMin()
    {
        return levelMin;
    }

    public void setLevelMin(int levelMin)
    {
        this.levelMin = levelMin;
    }

    public int getLevelMax()
    {
        return levelMax;
    }

    public void setLevelMax(int levelMax)
    {
        this.levelMax = levelMax;
    }
}
